using GamFi.Admin.API.Application.Contracts.Wallet.GetWallets;
using GamFi.Admin.API.Application.Contracts.Wallet.UpdateWallet;
using GamFi.Admin.API.Application.Features.Queries.Wallet.GetWallets;
using GamFi.Admin.API.Application.Features.Queries.Wallet.UpdateWallet;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace GamFi.Admin.API.WEB.Controllers;

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class WalletController(IMediator mediator) : ControllerBase
{
    /// <summary>
    /// Получает список всех кошельков.
    /// </summary>
    /// <param name="request">Запрос на получение списка кошельков.</param>
    /// <param name="cancellationToken">Токен отмены операции.</param>
    /// <returns>Ответ с информацией о кошельках.</returns>
    [HttpGet("GetWallets")]
    public async Task<GetWalletsResponse> GetWallets([FromQuery] GetWalletsRequest request, CancellationToken cancellationToken)
        => await mediator.Send(new GetWalletsQuery(request), cancellationToken);

    /// <summary>
    /// Обновляет информацию о кошельке.
    /// </summary>
    /// <param name="request">Запрос на обновление информации о кошельке.</param>
    /// <param name="cancellationToken">Токен отмены операции.</param>
    [HttpPut("UpdateWallet")]
    public async Task UpdateWallet(UpdateWalletRequest request, CancellationToken cancellationToken)
        => await mediator.Send(new UpdateWalletCommand(request), cancellationToken);
}